/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package tablasSql;

import gestion.Principal;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JInternalFrame;
import org.apache.log4j.Logger;
import otros.Util;

/**
 *
 * @author FERRETERIA
 */
public class Sql {
    
    private ConsultaBD mysql = new ConsultaBD();
    private final static Logger log = Logger.getLogger(Sql.class);
    
    
    Sql () {
        Util.setConfiguracionLog(Util.LOG4_FICH);
        
    }
    
    public int getSizeTable (String tabla) {
      int registros = 0;
      //obtenemos la cantidad de registros existentes en la tabla
      try{         
         ResultSet res = mysql.hacerConsulta("SELECT count(*) as total FROM " + tabla);
         res.next();
         registros = res.getInt("total");
         res.close();
      }catch(SQLException e){
          log.error(e);
      }
      return registros;
    }
    
    public Object [][] GetTabla(String colName[], String tabla, String sql, Class[] tipos) {
       Object[][] data = new Object[getSizeTable(tabla)][colName.length];  
       Object col[] = new Object[colName.length];
       //realizamos la consulta sql y llenamos los datos en "Object"
       try{
          ResultSet res = mysql.hacerConsulta(sql);
          int i = 0;
          while(res.next()){            
             for(int j=0; j<=colName.length-1;j++){
                 if ((tipos[j] == java.lang.Integer.class))
                     data[i][j] = new Integer (res.getInt(colName[j]));    
                 else if (tipos[j] == java.lang.Float.class) 
                     data[i][j] = new Float (res.getFloat(colName[j]));
                 else
                     data[i][j] = res.getString(colName[j]);
             }          
             i++;
          }
          res.close();
        }catch(SQLException e){
           log.error(sql + "\n" + e);
        }
        return data;
    }  
        
    public ResultSet getDatos (String sql) {
        return mysql.hacerConsulta(sql);
    }
    
    public int actualizarDatos (String sql, String[] datos, int numString, int numFloat) {
        return mysql.aiConsulta(sql, datos, numString, numFloat);
    }

    public void hacerConsulta (String sql) {
        mysql.hacerConsulta2(sql);
    }
    
    public static int getMax (String campo, String tabla) {
        int max = -1;
        try {
            ResultSet res = new Sql().getDatos("Select max("+ campo +") as max from " + tabla);
            if (res.next())
                max = res.getInt("max");
        } catch (SQLException ex) {
                log.error (ex);
       }
        return max;
    }
    
    public static int getMax (String sql) {
        int max = -1;
        try {
            ResultSet res = new Sql().getDatos(sql);
            if (res.next())
                max = res.getInt("max");
        } catch (SQLException ex) {
                log.error (ex);
       }
        return max;
    }
    
    public static String getFecha (String campo, String tabla) {
        String fecha = null;
        try {
            ResultSet res = new Sql().getDatos("Select "+ campo +" as fecha from " + tabla);
            if (res.next())
                fecha = res.getString("fecha");
        } catch (SQLException ex) {
            log.error(ex);
       }
        return fecha;
    }
    
    public static int getNextId (String tabla) {
        int id = -1;
        try {
            ResultSet res = new Sql().getDatos("select auto_increment as id from information_schema.tables where table_name='" + tabla + "'");
            if (res.next())
                id = res.getInt("id");
        } catch (SQLException ex) {
            log.error(ex);
       }
        return id;
    }
    
    public boolean is(String sql) {
        return mysql.existe(sql);
    } 
    
    public static int getCount(String campo, String valor, String tabla) {
        int retorno = -1;
        try {
            ResultSet res = new Sql().getDatos("select count(*) as valor from "+ tabla+" where " +campo+"="+valor);
            if (res.next())
                retorno = res.getInt("valor");
        } catch (SQLException ex) {
            log.error(ex);
       }
        return retorno;
    }
}
